from pyquery import PyQuery as pq

"""
    提取到节点之后，我们的最终目的当然是提取节点所包含的信息了。比较重要的信息有两类，一是获取属性，二是获取文本
"""

html = '''
<div class="wrap">
    <div id="container">
        <ul class="list">
             <li class="item-0">first item</li>
             <li class="item-1"><a href="link2.html">second item</a></li>
             <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
             <li class="item-1 active"><a href="link4.html">fourth item</a></li>
             <li class="item-0"><a href="link5.html">fifth item</a></li>
         </ul>
     </div>
 </div>
'''

"""
  示例1 attr() 方法来获取属性
"""
doc = pq(html)
a = doc('.list .item-1.active a')
print(a.attr('href')) # link4.html

a_s = doc('.list').find('a')
print(len(a_s)) # 4  获取到4个a
# 当返回结果包含多个节点时，调用 attr 方法，只会得到第一个节点的属性
print(a_s.attr('href')) #link2.html

# 如果需要获取多个节点的属性，还是需要遍历的
for a in a_s.items():
    print(a.attr('href'))



"""
 示例2 也可以通过调用 attr 属性来获取属性
"""
doc = pq(html)
a = doc('.list .item-1.active a')
print(a.attr.href) # link4.html


"""
 示例3 使用test() 方法获取文本
"""
doc = pq(html)
a = doc('.list .item-1.active a')
print(a.text()) #fourth item

# 注意如果用text() 它会忽略掉节点内部包含的所有 HTML，只返回纯文字内容
doc = pq(html)
li = doc('.list .item-0.active')
print(li.text()) #third item


"""
 示例4 使用html() 返回获取标签内部的html代码
"""
doc = pq(html)
li = doc('.list .item-0.active')
print(li.html()) #<a href="link3.html"><span class="bold">third item</span></a>


print('**************************************')
"""
  示例 5 如果我们选中的结果是多个节点，text() 或 html() 会返回什么内容？
  如果得到的结果是多个节点，并且想要获取每个节点的内部 HTML 文本，则需要遍历每个节点。而 text() 方法不需要遍历就可以获取，它将所有节点取文本之后合并成一个字符串(空格隔开)
"""
doc = pq(html)
a_s = doc('.list a')
print(a_s.text()) # second item third item fourth item fifth item   全部输出来了
lis_s = doc('.list .item-1')
print(lis_s.html()) # <a href="link2.html">second item</a>  只输出了第一个li标签内部的 html








